5.6

1. 更好的常量

定义常量时允许使用之前定义的常量进行计算:允许常量作为函数参数默认值:

const A = 2;
const B = A + 1;
class C
{
    const STR = 'hello';
    const STR2 = self::STR . ' world';
}

// 允许常量作为函数参数默认值
function func($arg = C::STR2)
{
    echo $arg, PHP_EOL;
    echo A, PHP_EOL;
    echo B;
}

func();
/*
hello world
2
3
*/

2. ...更好的可变函数参数

...用于代替 func_get_args()

function add(...$args)
{
    $result = 0;
    foreach ($args as $arg) {
        $result += $arg;    
    }
    return $result;
}

$arr = [2, 3]; // 同时可以在调用函数时,把数组展开为函数参数
echo add(1, ...$arr);// 结果为 6

3. 命名空间支持常量和函数

namespace Name\Space {
    const FOO = 42;
    function f()
    {
        echo __FUNCTION__ . "\n";
    }
}

namespace {
    use function Name\Space\f;
    use const Name\Space\FOO;

    echo FOO , PHP_EOL; // 42
    f(); // Name\Space\f
}